export default {
  mounted(el, binding) {
    function eventHandler(e) {
      // 可以检测出当前元素 e 是否是 el 的子节点（后节点）
      if (el.contains(e.target)) {
        return false
      }
      // 如果绑定的参数是函数，正常情况也应该是函数，执行
      if (binding.value && typeof binding.value === 'function') {
        // 执行方法，并将节点 e 传递到方法中
        binding.value(e)
      }
    }
    // 用于销毁前注销事件监听
    el.__click_outside__ = eventHandler
    // 添加事件监听,触发时会发送当前 dom 元素对象
    document.addEventListener('click', eventHandler)
  },
  beforeUnmount(el) {
    // 移除事件监听
    document.removeEventListener('click', el.__click_outside__)
    // 删除无用属性
    delete el.__click_outside__
  }
}
